#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Created by Ross on 19-3-22
import argparse


def str2bool(v):
    if v.lower() in ('yes', 'true', 't', 'y', '1'):
        return True
    elif v.lower() in ('no', 'false', 'f', 'n', '0'):
        return False
    else:
        raise argparse.ArgumentTypeError('Unsupported value encountered.')


class Hparams:
    # 类变量
    parser = argparse.ArgumentParser()

    # 目录设置
    parser.add_argument('--data_dir', default='data/10fold_shijie', type=str, help='要读取数据的目录')
    # 模型保存的目录，训练完之后会在目录下生成10个文件夹（分别是10折），里面存放着模型
    parser.add_argument('--log_dir', default='log/', help='存放模型权重的目录')

    # 训练参数
    parser.add_argument('--epochs', default=20, type=int)
    parser.add_argument('--lr', default=0.001, type=float, help='学习率')

    # 超参设置
    # seq_maxlen, emb_size, rnn_size, fake_task=None, num_class=31, use_crf=False, **kwargs
    parser.add_argument('--emb_size', default=400, type=int, help='embedding维度（如果有embedding层）')
    parser.add_argument('--seq_maxlen', default=30, type=int, help='最大时序长度')
    parser.add_argument('--rnn_size', default=128, type=int, help='RNN unit的维度')
    parser.add_argument('--fake_task', default='None', choices=['POS', 'None'], help='选择fake task')
    parser.add_argument('--num_class', default=31, type=int, help='domain类别数')
    parser.add_argument('--soft_att_size', default=64, type=int, help='soft attention的维度')
    parser.add_argument('--use_crf', default=False, type=str2bool, help='是否使用CRF')
    parser.add_argument('--ntags', required=False, type=int, help='fake task中类别数')
    parser.add_argument('--rnn_keep_prob', default=0.1, type=float, help='rnn dropout的keep_prob')
    parser.add_argument('--domain_keep_prob', default=0.1, type=float, help='domain dropout的keep_prob')
    parser.add_argument('--use_self_att', default=True, type=str2bool, help='是否使用self-attention')
    parser.add_argument('--num_thread', default=3, type=int, help='训练时候并行数，要使用train_joint_mul_task.py才有效')

    # 兼容jupyter notebook
    parser.add_argument(
        '-f', '--file',
        help='Path for input file. First line should contain number of lines to search in'
    )



if __name__ == '__main__':
    hparams = Hparams()
    args = hparams.parser.parse_args()
    print(vars(args))
